From d715fa4f075ef533f4e957f4e997a577f0640019 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Fri, 25 Jul 2014 15:38:06 -0700 Subject: [PATCH] Print a message when a command receives a signal Receiving a signal is normally indicative of violent termination, so the subcommand can't be relied upon to have printed some status information. As a result, signals now have some extra errors printed to stderr when they fail. Closes #261. The actual signal is still a bug, but it's an upstream rust bug. --- src/bin/cargo.rs | 8 ++++++-- src/cargo/core/registry.rs | 1 - src/cargo/core/resolver.rs | 1 - src/cargo/ops/cargo_rustc/fingerprint.rs | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/bin/cargo.rs b/src/bin/cargo.rs index 81c5cc13b..33ab1f9e6 100644 --- a/src/bin/cargo.rs +++ b/src/bin/cargo.rs @@ -94,9 +94,13 @@ fn execute() { match command { Ok(ExitStatus(0)) => (), - Ok(ExitStatus(i)) | Ok(ExitSignal(i)) => { + Ok(ExitStatus(i)) => { handle_error(CliError::new("", i as uint), &mut shell(false)) } + Ok(ExitSignal(i)) => { + let msg = format!("subcommand failed with signal: {}", i); + handle_error(CliError::new(msg, 1), &mut shell(false)) + } Err(_) => handle_error(CliError::new("No such subcommand", 127), &mut shell(false)) } } @@ -105,7 +109,7 @@ fn execute() { fn process(args: Vec) -> (String, Vec) { let mut args = Vec::from_slice(args.tail()); - let head = args.shift().unwrap_or("--help".to_string()); + let head = args.remove(0).unwrap_or("--help".to_string()); (head, args) } diff --git a/src/cargo/core/registry.rs b/src/cargo/core/registry.rs index e5752e336..db3425ecd 100644 --- a/src/cargo/core/registry.rs +++ b/src/cargo/core/registry.rs @@ -1,4 +1,3 @@ -use std::collections::HashMap; use std::vec::Vec; use core::{Source, SourceId, SourceMap, Summary, Dependency, PackageId, Package}; use util::{CargoResult, ChainError, Config, human}; diff --git a/src/cargo/core/resolver.rs b/src/cargo/core/resolver.rs index 4d7411bf6..c693754cf 100644 --- a/src/cargo/core/resolver.rs +++ b/src/cargo/core/resolver.rs @@ -1,6 +1,5 @@ use std::collections::HashMap; use std::fmt; -use serialize::{Encodable, Encoder}; use util::graph::{Nodes,Edges}; use core::{ diff --git a/src/cargo/ops/cargo_rustc/fingerprint.rs b/src/cargo/ops/cargo_rustc/fingerprint.rs index 6d2c0f3d9..4eb7f5719 100644 --- a/src/cargo/ops/cargo_rustc/fingerprint.rs +++ b/src/cargo/ops/cargo_rustc/fingerprint.rs @@ -5,7 +5,7 @@ use std::io::{fs, File}; use core::{Package, Target}; use util; use util::hex::short_hash; -use util::{CargoResult, Fresh, Dirty, Freshness, Config}; +use util::{CargoResult, Fresh, Dirty, Freshness}; use super::job::Job; use super::context::Context; -- 2.30.2